Fix Read/Write CR3 emulation.
authorcl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Fri, 17 Feb 2006 11:49:11 +0000 (11:49 +0000)
committercl349@firebug.cl.cam.ac.uk <cl349@firebug.cl.cam.ac.uk>
Fri, 17 Feb 2006 11:49:11 +0000 (11:49 +0000)
- on write, new_guest_cr3() takes an mfn not an ma
- for shadow_translate guests, apply mfn_to_gmfn/gmfn_to_mfn

Signed-off-by: Christian Limpach <Christian.Limpach@cl.cam.ac.uk>
xen/arch/x86/traps.c

index 3a1deb85357c02abbde961f5785b8662396e6a66..a9a0ff10b2453c8514147c1fc52f9f9cfc767a3a 100644 (file)
@@ -901,7 +901,8 @@ static int emulate_privileged_op(struct cpu_user_regs *regs)
             break;
             
         case 3: /* Read CR3 */
-            *reg = pagetable_get_paddr(v->arch.guest_table);
+            *reg = pfn_to_paddr(mfn_to_gmfn(v->domain,
+                                    pagetable_get_pfn(v->arch.guest_table)));
             break;
 
         case 4: /* Read CR4 */
@@ -950,7 +951,7 @@ static int emulate_privileged_op(struct cpu_user_regs *regs)
             
         case 3: /* Write CR3 */
             LOCK_BIGLOCK(v->domain);
-            (void)new_guest_cr3(*reg);
+            (void)new_guest_cr3(gmfn_to_mfn(v->domain, paddr_to_pfn(*reg)));
             UNLOCK_BIGLOCK(v->domain);
             break;